Proofing: Efficient SSA-based Java Verification
نویسندگان
چکیده
Verification is essential for assuring the integrity of a Java virtual machine when executing untrusted code. Existing verifiers decide whether or not a given bytecode program is safe. In contrast, we introduce the concept of proofing. Proofing does not change the semantics of programs that would have passed the original bytecode verifier. For programs that would have failed verification, our algorithm will either reject them, or transform them into programs (of unspecified semantics) that are guaranteed to be safe. During proofing, the original JVM code is transformed into an internal representation based on Static Single Assignment Form (SSA). We show that proofing without the SSA construction has linear complexity. Thus, SSA-based mobile-code frameworks can perform verification by using proofing, at the prize of an overhead that is only linear in the size of the program. Information and Computer Science University of California, Irvine Proofing: Efficient SSA-based Java Verification Andreas Gal, Christian W. Probst, and Michael Franz Department of Computer Science University of California, Irvine Irvine, CA, 92697 {gal, probst, franz}@uci.edu Abstract. Verification is essential for assuring the integrity of a Java virtual machine when executing untrusted code. Existing verifiers decide whether or not a given bytecode program is safe. In contrast, we introduce the concept of proofing. Proofing does not change the semantics of programs that would have passed the original bytecode verifier. For programs that would have failed verification, our algorithm will either reject them, or transform them into programs (of unspecified semantics) that are guaranteed to be safe. During proofing, the original JVM code is transformed into an internal representation based on Static Single Assignment Form (SSA). We show that proofing without the SSA construction has linear complexity. Thus, SSA-based mobile-code frameworks can perform verification by using proofing, at the prize of an overhead that is only linear in the size of the program. Verification is essential for assuring the integrity of a Java virtual machine when executing untrusted code. Existing verifiers decide whether or not a given bytecode program is safe. In contrast, we introduce the concept of proofing. Proofing does not change the semantics of programs that would have passed the original bytecode verifier. For programs that would have failed verification, our algorithm will either reject them, or transform them into programs (of unspecified semantics) that are guaranteed to be safe. During proofing, the original JVM code is transformed into an internal representation based on Static Single Assignment Form (SSA). We show that proofing without the SSA construction has linear complexity. Thus, SSA-based mobile-code frameworks can perform verification by using proofing, at the prize of an overhead that is only linear in the size of the program.
منابع مشابه
Proofing: An Efficient and Safe Alternative to Mobile-Code Verification
The safety of the Java Virtual Machine is founded on bytecode verification. Although verification complexity appears to roughly correlate with program size in the average case, its worst-case behavior is quadratic. This can be exploited for denial-of-service attacks using relatively short programs (applets or agents) specifically crafted to keep the receiving virtual machine’s verifier busy for...
متن کاملIntegrated Java Bytecode Verification
Existing Java verifiers perform an iterative data-flow analysis to discover the unambiguous type of values stored on the stack or in registers. Our novel verification algorithm uses abstract interpretation to obtain definition/use information for each register and stack location in the program, which in turn is used to transform the program into Static Single Assignment form. In SSA, verificati...
متن کاملStructural Encoding of Static Single Assignment Form
Static Single Assignment (SSA) form is often used as an intermediate representation during code optimization in Java Virtual Machines. Recently, SSA has successfully been used for bytecode verification. However, constructing SSA at the code consumer is costly. SSAbased mobile code transport formats have been shown to eliminate this cost by shifting SSA creation to the code producer. These new f...
متن کاملQuantifying the Benefits of SSA-Based Mobile Code
High-performance just-in-time compilers for Java need to invest considerable effort before actual code generation can commence. This is in part due to the very nature of the Java Virtual Machine, which is not well matched to the requirements of optimizing code generators. Alternative transportation formats based on Static Single Assignment form should theoretically be superior to virtual machin...
متن کاملEfficient Typestate Verification for Java
In this thesis, we investigate the feasability of supporting software development by static program analysis. We present an algorithm for partly interprocedural context-sensitive typestate analysis on Java programs which builds on jFirm, a Java implementation of the SSA-based intermediate language Firm [LBBG05], and uses finite state machines as typestate specification. We implemented the algor...
متن کاملذخیره در منابع من
با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید
عنوان ژورنال:
دوره شماره
صفحات -
تاریخ انتشار 2004